-- 神秘学香薰蜡烛制作助手 - Supabase 数据库表结构
-- 请在 Supabase SQL Editor 中执行以下 SQL 语句

-- 1. 精油表
CREATE TABLE essential_oils (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price_per_ml DECIMAL(10,2) NOT NULL,
    effects TEXT[] NOT NULL, -- 功效数组
    planet VARCHAR(50), -- 对应行星
    moon_phase VARCHAR(50), -- 适合的月相
    chakra VARCHAR(50), -- 对应脉轮
    description TEXT,
    keywords TEXT[], -- 关键词数组
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 2. 容器表
CREATE TABLE containers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    material VARCHAR(50) NOT NULL, -- 材料：陶瓷、玻璃等
    color VARCHAR(50) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    chakra VARCHAR(50), -- 对应脉轮
    symbolism TEXT, -- 象征意义
    description TEXT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 3. 包装类型表
CREATE TABLE packaging_types (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    style VARCHAR(50) NOT NULL, -- 风格：简约、豪华、神秘学
    price DECIMAL(10,2) NOT NULL,
    description TEXT,
    features TEXT[], -- 特色功能数组
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 4. 蜡材表
CREATE TABLE wax_types (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price_per_gram DECIMAL(10,3) NOT NULL,
    burn_time_per_gram INTEGER, -- 每克燃烧时间（分钟）
    characteristics TEXT[], -- 特性数组
    description TEXT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 5. 功效分类表
CREATE TABLE effect_categories (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    icon VARCHAR(100), -- 图标类名
    color VARCHAR(50), -- 主题色
    description TEXT,
    keywords TEXT[], -- 关键词数组
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 6. 产品表（用户创建的蜡烛产品）
CREATE TABLE products (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    name VARCHAR(200) NOT NULL,
    effects TEXT[] NOT NULL,
    essential_oils JSONB NOT NULL, -- 精油配置
    wax_type VARCHAR(100) NOT NULL,
    wax_amount INTEGER NOT NULL, -- 蜡材用量（克）
    container_id INTEGER REFERENCES containers(id),
    packaging_id INTEGER REFERENCES packaging_types(id),
    cost DECIMAL(10,2) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    profit_margin DECIMAL(5,2) NOT NULL,
    status VARCHAR(50) DEFAULT '库存中', -- 状态：库存中、已售出、预定
    notes TEXT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 插入初始数据

-- 精油数据
INSERT INTO essential_oils (name, price_per_ml, effects, planet, moon_phase, chakra, description, keywords) VALUES
('薰衣草', 2.50, ARRAY['睡眠', '放松', '净化'], '月亮', '满月', '顶轮', '温和舒缓，促进深度睡眠', ARRAY['放松', '安眠', '舒缓']),
('迷迭香', 3.00, ARRAY['专注', '记忆', '净化'], '太阳', '新月', '眉心轮', '增强记忆力和专注力', ARRAY['记忆', '专注', '清晰']),
('玫瑰', 8.00, ARRAY['爱情', '自爱', '心灵治愈'], '金星', '满月', '心轮', '爱情与美丽的象征', ARRAY['爱情', '美丽', '浪漫']),
('肉桂', 4.50, ARRAY['财富', '成功', '保护'], '火星', '上弦月', '脐轮', '激发行动力和财富能量', ARRAY['财富', '成功', '激情']),
('乳香', 12.00, ARRAY['保护', '净化', '灵性'], '太阳', '新月', '顶轮', '神圣的保护和净化', ARRAY['神圣', '保护', '净化']),
('柠檬', 2.00, ARRAY['净化', '清洁', '专注'], '太阳', '上弦月', '太阳神经丛轮', '清新净化，提升专注', ARRAY['清新', '净化', '活力']);

-- 容器数据
INSERT INTO containers (name, material, color, price, chakra, symbolism, description) VALUES
('红色陶瓷罐', '陶瓷', '红色', 15.00, '海底轮', '生命力与激情', '象征生命力、勇气和激情的红色容器'),
('橙色陶瓷罐', '陶瓷', '橙色', 15.00, '脐轮', '创造力与活力', '激发创造力和个人力量的橙色容器'),
('黄色陶瓷罐', '陶瓷', '黄色', 15.00, '太阳神经丛轮', '智慧与自信', '代表智慧、自信和个人力量的黄色容器'),
('绿色陶瓷罐', '陶瓷', '绿色', 15.00, '心轮', '爱与治愈', '象征爱情、治愈和平衡的绿色容器'),
('蓝色陶瓷罐', '陶瓷', '蓝色', 15.00, '喉轮', '沟通与真理', '促进沟通和表达真理的蓝色容器'),
('紫色陶瓷罐', '陶瓷', '紫色', 15.00, '顶轮', '灵性与智慧', '连接高等意识和灵性智慧的紫色容器');

-- 包装类型数据
INSERT INTO packaging_types (name, style, price, description, features) VALUES
('简约包装', '简约', 5.00, '简洁环保的包装设计', ARRAY['环保材料', '简洁设计', '成本效益']),
('豪华包装', '豪华', 15.00, '精美豪华的礼品包装', ARRAY['精美包装', '礼品盒', '丝带装饰']),
('神秘学包装', '神秘学', 12.00, '带有神秘学符号的特殊包装', ARRAY['神秘符号', '特殊设计', '收藏价值']);

-- 蜡材数据
INSERT INTO wax_types (name, price_per_gram, burn_time_per_gram, characteristics, description) VALUES
('大豆蜡', 0.08, 7, ARRAY['天然', '环保', '燃烧干净'], '天然大豆制成，燃烧干净无毒'),
('蜂蜡', 0.15, 8, ARRAY['天然', '净化空气', '持久'], '天然蜂蜡，具有净化空气的特性'),
('椰子蜡', 0.12, 9, ARRAY['天然', '燃烧时间长', '香味持久'], '椰子油制成，燃烧时间长且香味持久');

-- 功效分类数据
INSERT INTO effect_categories (name, icon, color, description, keywords) VALUES
('睡眠', 'fas fa-moon', '#6366f1', '促进深度睡眠和放松', ARRAY['睡眠', '放松', '安眠', '休息']),
('专注', 'fas fa-brain', '#8b5cf6', '增强专注力和记忆力', ARRAY['专注', '记忆', '学习', '工作']),
('爱情', 'fas fa-heart', '#ec4899', '吸引爱情和增进感情', ARRAY['爱情', '浪漫', '感情', '吸引']),
('财富', 'fas fa-coins', '#f59e0b', '招财进宝和事业成功', ARRAY['财富', '金钱', '成功', '事业']),
('保护', 'fas fa-shield-alt', '#10b981', '提供保护和驱除负能量', ARRAY['保护', '安全', '驱邪', '防护']),
('净化', 'fas fa-sparkles', '#06b6d4', '净化空间和清洁能量', ARRAY['净化', '清洁', '清理', '纯净']);

-- 创建更新时间触发器函数
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = NOW();
    RETURN NEW;
END;
$$ language 'plpgsql';

-- 为所有表添加更新时间触发器
CREATE TRIGGER update_essential_oils_updated_at BEFORE UPDATE ON essential_oils FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_containers_updated_at BEFORE UPDATE ON containers FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_packaging_types_updated_at BEFORE UPDATE ON packaging_types FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_wax_types_updated_at BEFORE UPDATE ON wax_types FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_effect_categories_updated_at BEFORE UPDATE ON effect_categories FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TRIGGER update_products_updated_at BEFORE UPDATE ON products FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();

-- 启用行级安全策略（RLS）
ALTER TABLE essential_oils ENABLE ROW LEVEL SECURITY;
ALTER TABLE containers ENABLE ROW LEVEL SECURITY;
ALTER TABLE packaging_types ENABLE ROW LEVEL SECURITY;
ALTER TABLE wax_types ENABLE ROW LEVEL SECURITY;
ALTER TABLE effect_categories ENABLE ROW LEVEL SECURITY;
ALTER TABLE products ENABLE ROW LEVEL SECURITY;

-- 创建公共读取策略（所有人都可以读取基础数据）
CREATE POLICY "Allow public read access" ON essential_oils FOR SELECT USING (true);
CREATE POLICY "Allow public read access" ON containers FOR SELECT USING (true);
CREATE POLICY "Allow public read access" ON packaging_types FOR SELECT USING (true);
CREATE POLICY "Allow public read access" ON wax_types FOR SELECT USING (true);
CREATE POLICY "Allow public read access" ON effect_categories FOR SELECT USING (true);

-- 产品表策略（用户可以管理自己的产品）
CREATE POLICY "Users can manage their own products" ON products FOR ALL USING (true);

-- 创建索引以提高查询性能
CREATE INDEX idx_essential_oils_effects ON essential_oils USING GIN (effects);
CREATE INDEX idx_essential_oils_keywords ON essential_oils USING GIN (keywords);
CREATE INDEX idx_containers_color ON containers (color);
CREATE INDEX idx_containers_chakra ON containers (chakra);
CREATE INDEX idx_products_status ON products (status);
CREATE INDEX idx_products_created_at ON products (created_at);

-- 完成！
-- 执行完成后，您的 Supabase 数据库就准备好了
-- 请确保在 Supabase 项目设置中获取您的 URL 和 anon key
-- 并在 config.js 文件中更新相应的配置